\documentclass[a4paper]{article}

% Inclure un graphique 
\usepackage{graphics}							% Le package à utiliser
%\begin{figure}[h] 								% [h] pour "here", [t] pour "top" et [b] pour "bottom"
%\scalebox{.5}{\includegraphics{schema.png}} 	% Réduit de 50% la taille
%\caption{légende} 	
%\label{Fig:nom_de_la_figure}					% Garde le compteur de schéma, utiliser avec \ref{Fig:nom_de_la_figure}
%\end{figure}

% Tirer un trait 
%\hrulefill

% Faire un tableau 
%\begin{tabular}{|l|c|c|}
%\hline
% &  &  \\
% &  &  \\
% &  &  \\
% &  &  \\
%\hline
%\end{tabular}

\usepackage{pdfpages}
\usepackage{hyperref}
\hypersetup{
	colorlinks=true,	%colorise les liens
	urlcolor= blue,		%couleur des hyperliens
	linkcolor= blue,	%couleur des liens internes
}

\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\usepackage{cmbright}
\usepackage{listings}
\usepackage{amsfonts} % Pour les notations d'ensemble (natural,real...)
\usepackage{stmaryrd} % Pour les doubles crochet ex: \llbracket

\begin{document}
\lhead{DUCHENE Pierre \\DUPONT Thomas} % Entête de Gauche
\rhead{AOC - TP Métronome} % Entête de droite
\pagestyle{fancy}

\section{Introduction}
Le but de ce projet est de réaliser, à l'aide des outils de conception vus dans le module AOC, un métronome. Nous allons voir comment simuler des contrôles à événement.

\section{Reprise de code}
\subsection{Groupes}
Nous avons regroupé certaines classes entre elles dans l'explorateur d'XCode de manière à améliorer la lisibilité du projet.
On retrouve donc les groupes:
\begin{itemize}
\item IHM:		Contient les classes qui composent l'IHM ainsi que les classes qui permettent de mettre en place l'interaction par événement.
\item Control:	Contient la classe contrôleur au sens de MVC.
\item Metier:	Contient le code métier de l'application notamment le moteur du métronome mais aussi l'implantation du Pattern Command.
\item Protocol:	Contient la déclaration de toutes les interfaces. Comme elles sont assez peu nombreuses ils nous as semblé judicieux de les rassembler.
\item Tests:	Contient les classes de test OCUnit.
\end{itemize}
Il existe également d'autres groupes pour classer les différentes ressources comme les images, les fichier de configurations etc\dots
\begin{figure}[h] 								% [h] pour "here", [t] pour "top" et [b] pour "bottom"
\begin{center}
\scalebox{0.7}{\includegraphics{./images/explorer.png}} 	% Réduit de 50% la taille
\caption{Groupes} 	
\label{Fig:explorer}					% Garde le compteur de schéma, utiliser avec \ref{Fig:nom_de_la_figure}
\end{center}
\end{figure}

\subsection{IHM}
Nous avons séparé ce groupe en plusieurs parties, chaque partie de l'IHM à donc son propre groupe.
Nous avons créé chaque partie de l'IHM avec Interface Builder d'où la présence pour chaque partie d'un fichier .xib.
On trouve également une classe, MetronomeView qui se charge d'assembler chaque partie de l'IHM.\\
D'autres part, on trouve la classe (GestionnaireEvenement) qui se charge de simuler les événements de l'IHM.
Nous y trouvons l'opération checkMateriel qui, appelée régulièrement permet de surveiller les interactions de l'utilisateur
puis de prévenir le contrôleur en conséquence.
\begin{figure}[h] 								% [h] pour "here", [t] pour "top" et [b] pour "bottom"
\begin{center}
\scalebox{0.7}{\includegraphics{./images/IHM.png}} 	% Réduit de 50% la taille
\caption{IHM} 	
\label{Fig:explorer}					% Garde le compteur de schéma, utiliser avec \ref{Fig:nom_de_la_figure}
\end{center}
\end{figure}

\subsection{Control}
Le groupe Control ne contient que la classe MoteurController, c'est elle qui reçoit les événements générés par notre gestionnaire d'événement.
En tant que Control du modèle MVC, MoteurController fait le lien entre le Moteur et l'IHM

\subsection{Metier}
Le groupe Metier contient logiquement le code metier de l'application représenté par la classe Moteur.
Il contient également l'implémentation des commandes qui permettent d'éteindre une LED (CommandeEteindre) et celle qui permet d'activer le métronome (CommandeFire).

\subsection{Protocol}
Dans ce groupe on retrouve donc toutes les définitions des interfaces.
Nous le nommons ainsi car en Objective-C une interface est appelée Protocol.
Nous avons sous classé la partie IHM des protocoles.

\subsection{Tests}
Une seule classe de test est présente car seul le moteur nous semblait vraiment nécessaire à tester.
Les tests sont réalisés à l'aide d'OCUnit et nous avons configuré XCode pour effectuer les tests avant chaque compilation.
De cette manière nous sommes sûrs de ne pas créer d'erreur dans la partie métier de l'application.

\section{Conception}
\subsection{Diagrammes de classes}
\begin{itemize}
\item	\hyperlink{materielpart.1}{Gestion des événements}
\item	\hyperlink{evenementpart.1}{Gestion du Matériel}
\item	\hyperlink{moteurpart.1}{Moteur du Métronome}
\end{itemize}

\subsection{Diagrammes de séquence}
\begin{itemize}
\item	\hyperlink{secondpart.1}{Appuie sur le bouton Inc}
\item	\hyperlink{secondpart.1}{Appuie sur Start}
\item	\hyperlink{thirdpart.1}{Tourne la molette}
\item	\hyperlink{thirdpart.1}{Séquence d'événement}
\end{itemize}

\section{Documentation}
Toute la documentation des classes générée est disponible \href{http://www.mobile-dev.eu/aoc/Headerdoc/MasterTOC.html}{ici}.
% Annexes
% Diag Classes
\includepdfmerge[nup=1x1,link=true,linkname=materielpart]{../../Conception/Materiel.pdf}
\includepdfmerge[nup=1x1,link=true,linkname=evenementpart]{../../Conception/Evenement.pdf}
\includepdfmerge[nup=1x1,link=true,linkname=moteurpart]{../../Conception/Moteur.pdf}

% Diag Seq
\includepdfmerge[nup=1x2,offset=0 -10,delta=0 20,link=true,linkname=secondpart]{../../Conception/SequenceBoutonInc.pdf,../../Conception/SequenceStart.pdf}
\includepdfmerge[nup=1x2,offset=0 -10,delta=0 5,link=true,linkname=thirdpart]{../../Conception/SequenceMolette.pdf,../../Conception/SequenceEvenement.pdf}


\end{document}